package com.yjj.springboot3.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yjj.springboot3.model.dto.conversation.ConversationQueryRequest;
import com.yjj.springboot3.model.entity.Conversation;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yjj.springboot3.model.vo.AdminConversationVO;
import com.yjj.springboot3.model.vo.ConversationListVO;
import com.yjj.springboot3.model.vo.MessageListVO;

import java.util.List;

/**
* @author 王洪顺
* @description 针对表【conversation(对话)】的数据库操作Service
* @createDate 2025-09-02 20:03:38
*/
public interface ConversationService extends IService<Conversation> {

    /**
     * 保存或更新对话消息
     * @param conversationId 对话ID（数据库主键id）
     * @param messageJson 消息JSON字符串
     * @return 是否保存成功
     */
    boolean saveOrUpdateConversation(Long conversationId, String messageJson);

    /**
     * 获取查询包装器
     * @param conversationQueryRequest 查询请求
     * @return 查询包装器
     */
    QueryWrapper<Conversation> getQueryWrapper(ConversationQueryRequest conversationQueryRequest);

    /**
     * 获取用户的对话列表
     * @param userId 用户ID
     * @param current 当前页
     * @param pageSize 页面大小
     * @return 对话列表
     */
    List<ConversationListVO> getUserConversationList(Long userId, long current, long pageSize);

    /**
     * 根据对话ID获取消息列表
     * @param conversationId 对话ID
     * @param userId 用户ID（用于权限验证）
     * @return 消息列表
     */
    MessageListVO getMessageList(Long conversationId, Long userId);

    /**
     * 删除用户的对话
     * @param conversationId 对话ID
     * @param userId 用户ID（用于权限验证）
     * @return 是否删除成功
     */
    boolean deleteUserConversation(Long conversationId, Long userId);

    /**
     * 获取管理员对话列表（分页）
     * @param conversationQueryRequest 查询请求
     * @return 分页结果
     */
    Page<AdminConversationVO> getAdminConversationPage(ConversationQueryRequest conversationQueryRequest);

    /**
     * 管理员删除对话
     * @param conversationId 对话ID
     * @return 是否删除成功
     */
    boolean adminDeleteConversation(Long conversationId);

    /**
     * 管理员获取对话详情（包含完整消息）
     * @param conversationId 对话ID
     * @return 对话详情
     */
    MessageListVO getAdminConversationDetail(Long conversationId);
}
